package config

import (
	"fmt"

	"github.com/fsnotify/fsnotify"
	"github.com/spf13/viper"
)

var Config = &ConfigStruct{}

func init() {
	fmt.Println("*** init config ***")
	// 读取yaml文件
	v := viper.New()
	// 设置读取的配置文件
	v.SetConfigName("config")
	// 添加读取配置文件的路径
	v.AddConfigPath("./")
	// 设置配置文件类型
	v.SetConfigType("yaml")

	if err := v.ReadInConfig(); err != nil {
		fmt.Printf("err:%s\n", err)
	}

	// 监听配置文件修改
	v.WatchConfig()
	v.OnConfigChange(func(e fsnotify.Event) {
		fmt.Println("Config file changed:", e)
	})

	*Config = parseYaml(v)
}

// yml 反序列化
func parseYaml(v *viper.Viper) ConfigStruct {
	var yamlObj ConfigStruct
	if err := v.Unmarshal(&yamlObj); err != nil {
		fmt.Printf("err: %s", err)
	}
	return yamlObj
}

type ConfigStruct struct {
	Common   CommonStruct
	Postgres PostgresStruct
}

// 在配置文件很多时，可以将此部分分文件去写
type CommonStruct struct {
	Port string
}

type PostgresStruct struct {
	Type     string
	Host     string
	Port     string
	Username string
	Password string
	Database string
	Print    bool
}
